/*************************************************************************
@Author: bighu
@Created Time : 2022年01月16日 星期日 13时51分40秒
@File Name: service.go
@Description:Go语言实现的tcp通信的服务端
************************************************************************/

package main

import (
	"fmt"
	"net"
	"os"
	"time"
)

var (
	inputmasseg string
)

func main() {
	fmt.Println("vim-go")
	Licen()
}

//监听，等待连接
func Licen() {
	TCPLicen, err := net.Listen("tcp", ":8000")
	HandleError(err)
	defer TCPLicen.Close()
	for {
		conn, err := TCPLicen.Accept()
		if HandleError(err) {
			continue
		}
		go getMasseg(conn)
		sendMasseg(conn)
	}
}

//异常处理
func HandleError(err error) bool {
	if err != nil {
		fmt.Fprintf(os.Stderr, "Fatal error:%s", err.Error())
		return true
	} else {
		return false
	}
}

//读取数据
func getMasseg(conn net.Conn) {
	//自动断开连接释放资源
	defer conn.Close()
	buffer := make([]byte, 2048)
	for {
		datalen, err := conn.Read(buffer)
		if HandleError(err) {
			break
		}
		fmt.Println("[", time.Now(), "]:", string(buffer[:datalen]))
	}
}

//发送数据
func sendMasseg(conn net.Conn) {
	//自动断开连接释放资源
	defer conn.Close()
	for {
		fmt.Println("[", time.Now(), "]:>")
		fmt.Scanln(&inputmasseg)
		var bytemasseg []byte = []byte(inputmasseg)
		_, err := conn.Write(bytemasseg)
		if HandleError(err) {
			break
		}

	}
}
